package dev.view;

import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.InputStreamReader;

import dev.controller.myControllerImpl;

public class UserroleFahrplandisponent implements UserroleInterface{
	BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	private myControllerImpl control;
	final static String[] skills = {
		"Zug hinzufuegen","Zug loeschen",
		"Abmelden","Verlassen"
	};
	@Override
	public void showMenu(myControllerImpl inControl) {
		control = inControl;
		
		boolean ok;
		int menuWahl;
		do{
			print("Menu");
			for(int i=0;i<skills.length;++i){
				if(i<9) print(" "+(i+1)+". "+skills[i]); else print((i+1)+". "+skills[i]);
			}
			menuWahl = 0;
			do{
				ok = true;
				try{
					System.out.print("Auswahl:\t");
					menuWahl = Integer.parseInt(input.readLine());
				}catch(Exception e){
					ok = false;
					print("Falsche Eingabe!");
					Toolkit.getDefaultToolkit().beep();
				}
			}while(!ok);
			selectActivity(menuWahl);
		}while(menuWahl!=4);
	}
	public void selectActivity(int index) {
		switch (index){
			case  1:  zug_hinzufuegen(); break;
			case  2:	zuege_loeschen();  break;
			case  3:	break;
			case  4:	break;
			default:	break;	
		}
	}
	private void zug_hinzufuegen(){

		boolean ok;
		String linienFarbe = "", startzeit = "", endzeit = "";
		int linienRichtung = 0, statID_start = 0, statID_ende = 0, zeitIntervall = 0,
			  startzeitH = 0, startzeitM = 0, endzeitH = 0, endzeitM = 0;
		do{
			do {
				ok = true;
				print("Eingabe der erwarteten Parameter!");
				try{
					System.out.print("Linien-Farbe:\t\t");
					linienFarbe = input.readLine();
					System.out.print("Linien-Richtung:\t");
					linienRichtung = Integer.parseInt(input.readLine());
					System.out.print("Stations-ID(Start):\t");
					statID_start = Integer.parseInt(input.readLine());
					System.out.print("Stations-ID(Ende):\t");
					statID_ende = Integer.parseInt(input.readLine());
				
					System.out.print("Startzeit(HH24:MI):\t");
					startzeit = input.readLine();
					startzeit = startzeit.replaceAll(" ",""); // Entfernt alle Leerzeichen
					String[] startTmp = startzeit.split(":");
					startzeitH = Integer.parseInt(entferneFuehrendenNullen(startTmp[0]));
					startzeitM = Integer.parseInt(entferneFuehrendenNullen(startTmp[1]));
				
					System.out.print("Endzeit(HH24:MI):\t");
					endzeit = input.readLine();
					startzeit = endzeit.replaceAll(" ",""); // Entfernt alle Leerzeichen
					String[] endeTmp = startzeit.split(":");
					endzeitH = Integer.parseInt(entferneFuehrendenNullen(endeTmp[0]));
					endzeitM = Integer.parseInt(entferneFuehrendenNullen(endeTmp[1]));
				
					System.out.print("Intervall:\t\t");
					zeitIntervall = Integer.parseInt(input.readLine());
				}catch(Exception e){
					ok = false;
					print("Falsche Eingabe!");
					Toolkit.getDefaultToolkit().beep();
				}
			}while(!ok);
			if( startzeitH < 0 || startzeitH > 23 ||
				  startzeitM < 0 || startzeitM > 59 ||
				  endzeitH < 0 || endzeitH > 23 ||
				  endzeitM < 0 || endzeitM > 59 ){
				ok = false;
				print("Falsche Zeitangabe!");
				Toolkit.getDefaultToolkit().beep();
			}
		}while(!ok);
			
		control.zug_hinzufuegen(linienFarbe, linienRichtung, statID_start, statID_ende, 
				                    startzeitH, startzeitM, endzeitH, endzeitM, zeitIntervall);
	}	
	private String entferneFuehrendenNullen(String text){
		String returnText = text;
		while(returnText.startsWith("0") && returnText.length()>1){
			returnText = returnText.substring(1);
		}
		return returnText;
	}
	private void zuege_loeschen(){

		boolean ok;
		int zugID = 0;
		do {
			ok = true;
			print("Eingabe der erwarteten Parameter!");
			try{
				System.out.print("Zug-ID:\t");
				zugID = Integer.parseInt(input.readLine());
			}catch(Exception e){
				ok = false;
				print("Falsche Eingabe!");
				Toolkit.getDefaultToolkit().beep();
			}
		}while(!ok);
		control.zuege_loeschen(zugID);
	}
	@Override
	public String getName() {
		return "Fahrplandisponent";
	}
	public void print(String inString){
		System.out.println(inString); // :)
	}
}